RasEnumConnections (coredll)
Last changed: -83.105.22.250

.

C# Signature:

    [DllImport("coredll.dll", CharSet = CharSet.Unicode)]
    internal static extern UInt32 RasEnumConnections([In, Out] _RASCONN[] lprasconn, ref UInt32 lpcb, ref UInt32 lpcConnections);

User-Defined Types:

    const int RAS_MaxEntryName = 20;
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct _RASCONN
    {
        private UInt32 m_size;
        private IntPtr m_hrasconn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = RAS_MaxEntryName + 1)]
        private char[] m_entryName;

        public IntPtr ConnectionHandle { get { return m_hrasconn; } }
        public string EntryName { get { return new string(m_entryName).TrimEnd(new char[] { '\0' }); } }

        public static _RASCONN CreateStruct()
        {
        _RASCONN obj = new _RASCONN();
        obj.m_size = System.Convert.ToUInt32(Marshal.SizeOf(typeof(_RASCONN)));
        obj.m_hrasconn = IntPtr.Zero;
        obj.m_entryName = new char[RAS_MaxEntryName + 1];
        return obj;
        }    
    }

Sample Code:

    public static _RASCONN[] EnumerateConnections()
    {
        _RASCONN[] rasconn;
        UInt32 size = 0, noelements = 0;
        size = System.Convert.ToUInt32(Marshal.SizeOf((rasconn = new _RASCONN[1])[0] = _RASCONN.CreateStruct()));
        if (RasEnumConnections(rasconn, ref size, ref noelements) != 0x00)
        {
            size = System.Convert.ToUInt32(Marshal.SizeOf((rasconn = new _RASCONN[size / Marshal.SizeOf(typeof(_RASCONN))])[0] =                         _RASCONN.CreateStruct()) * rasconn.Length);
            if (RasEnumConnections(rasconn, ref size, ref noelements) != 0x00) { rasconn = null; }
        }
        return rasconn;
    }